﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ClsUtilities;
using ClsModel;
using System.Data;
using System.Text.RegularExpressions;
using ClsController.CatalogosNegocio;
using System.Drawing;
using ClsUtilities.MethodInfo;
using System.Threading;
using ClsCustomControls;
using System.Diagnostics;



namespace ClsController
{
    public class ClsLogicaNeg
    {
        private ClsModelCommon model;
        private DataSet ds;
        private ErrorProvider utilErrores;
        private MethodResponse response;
        private static List<ManualResetEvent> resetEvents = new List<ManualResetEvent>();
        private List<Thread> thread_multi = new List<Thread>();


        public ClsLogicaNeg()
        {
            model = new ClsModelCommon();
            utilErrores = new ErrorProvider();
        }

        public void LoginApp(Control textUserName, Control textPass, Form current, Form nextform)
        {
            String userName, pass;
            response = new MethodResponse();
            userName = ControlGetValue(textUserName);
            bool valCorrectas = true;
            valCorrectas = Validaciones(Catalogo.TiposValidaciones.AlfaNum, textUserName, 1, "UserName is requiered");

            pass = ControlGetValue(textPass);
            /* if (valCorrectas)
                 Validaciones(Catalogo.TiposValidaciones.Clave, textPass, 1, "Password is requiered");
             */
            if (valCorrectas)
            {
                response = model.login(userName, pass);

                if (response.Estado)
                {
                    ManejoForm(current, nextform);
                }

            }


        }

        public void CargarMutliplesComboBoxCatalogos(TableStruct.TblInfo[] NombreTabla, String[] CodeColumn, String[] DescrColum, ComboBox[] cmb)
        {
            ds = new DataSet();
            response = new MethodResponse();
            int x, total_elem;
            total_elem = NombreTabla.Length - 1;

            for (x = 0; x <= total_elem; x++)
            {
                response = model.cargarComboBox(NombreTabla[x].ToString());
                if (response.Estado)
                {
                    cmb[x].DataSource = response.ConjuntoDatos.Tables[0];
                    cmb[x].DisplayMember = DescrColum[x];
                    cmb[x].ValueMember = CodeColumn[x];

                    if (NombreTabla[x].ToString() == TableStruct.TblInfo.ASSITENT_WORKER.ToString() ||
                        NombreTabla[x].ToString() == TableStruct.TblInfo.THERAPIST_WORKER.ToString() ||
                        NombreTabla[x].ToString() == TableStruct.TblInfo.WORKERS.ToString())
                    {
                        cmb[x].DropDownStyle = ComboBoxStyle.DropDownList;
                    }
                    cmb[x].Text = "";
                }
            }

        }

        public void CargarMutliplesComboBoxCatalogosDBField(TableStruct.TblInfo[] NombreTabla, List<DBDropDownList> dropDownList)
        {
            ds = new DataSet();
            response = new MethodResponse();
            int x, total_elem;
            total_elem = NombreTabla.Length - 1;

            for (x = 0; x <= total_elem; x++)
            {
                response = model.cargarComboBox(NombreTabla[x].ToString());
                if (response.Estado)
                {
                    dropDownList[x].DataSource = response.ConjuntoDatos.Tables[0];
                    dropDownList[x].DisplayMember = dropDownList[x].DBDescColumnBind.ToString();
                    dropDownList[x].ValueMember = dropDownList[x].DBCodeColumnBind.ToString();

                    if (NombreTabla[x].ToString() == TableStruct.TblInfo.ASSITENT_WORKER.ToString() ||
                        NombreTabla[x].ToString() == TableStruct.TblInfo.THERAPIST_WORKER.ToString() ||
                        NombreTabla[x].ToString() == TableStruct.TblInfo.WORKERS.ToString())
                    {
                        dropDownList[x].DropDownStyle = ComboBoxStyle.DropDownList;
                    }
                    dropDownList[x].Text = "";
                }
            }

        }

        public void CargarComboBoxCatalogos(TableStruct.TblInfo NombreTabla, String CodeColumn, String DescrColum, ComboBox cmb)
        {
            ds = new DataSet();
            response = new MethodResponse();
            response = model.cargarComboBox(NombreTabla.ToString());
            if (response.Estado)
            {
                cmb.DataSource = response.ConjuntoDatos.Tables[0];
                cmb.DisplayMember = DescrColum;
                cmb.ValueMember = CodeColumn;
            }

        }


        //**********************Pacientes
        public void CargarPacientes(TextBox nombre1, TextBox nombre2, TextBox apellido1, TextBox apellido2, ComboBox agencia, ComboBox terapista, ComboBox asistente, DateTimePicker fecha_naci, TextBox cid, TextBox phone, TextBox address, ComboBox cbxocupationpat, TextBox email, ComboBox cmb)
        {
            ds = new DataSet();
            response = new MethodResponse();
            String patronBusquda = ControlGetValue(cmb);

            if (String.IsNullOrEmpty(patronBusquda))
            {
                MessageBox.Show("Debe seleccionar un paciente");
            }
            else
            {
                response = model.buscarPaciente(patronBusquda);
            }
            if (response.Estado)
            {
                nombre1.Text = response.ConjuntoDatos.Tables[0].Rows[0][0].ToString();
                nombre2.Text = response.ConjuntoDatos.Tables[0].Rows[0][1].ToString();
                apellido1.Text = response.ConjuntoDatos.Tables[0].Rows[0][2].ToString();
                apellido2.Text = response.ConjuntoDatos.Tables[0].Rows[0][3].ToString();
                agencia.Text = response.ConjuntoDatos.Tables[0].Rows[0][4].ToString();
                terapista.SelectedValue = response.ConjuntoDatos.Tables[0].Rows[0][5].ToString();
                asistente.SelectedValue = response.ConjuntoDatos.Tables[0].Rows[0][6].ToString();
                fecha_naci.Value = Convert.ToDateTime(response.ConjuntoDatos.Tables[0].Rows[0][7].ToString());
                cid.Text = response.ConjuntoDatos.Tables[0].Rows[0][8].ToString();
                phone.Text = response.ConjuntoDatos.Tables[0].Rows[0][9].ToString();
                address.Text = response.ConjuntoDatos.Tables[0].Rows[0][10].ToString();
                cbxocupationpat.SelectedValue = response.ConjuntoDatos.Tables[0].Rows[0][11].ToString();
                email.Text = response.ConjuntoDatos.Tables[0].Rows[0][12].ToString();
            }
        }

        public void CargarPacietnes(TextBox txtpatron, ComboBox cmb)
        {
            ds = new DataSet();
            response = new MethodResponse();
            String patronBusquda = ControlGetValue(txtpatron);

            if (String.IsNullOrEmpty(patronBusquda))
            {
                response = model.buscarPacientes();
            }
            else
            {
                response = model.buscarPacientes(patronBusquda);
            }
            if (response.Estado)
            {
                cmb.DataSource = response.ConjuntoDatos.Tables[0];
                cmb.DisplayMember = TableStruct.PATIENT.PA_NAME.ToString();
                cmb.ValueMember = TableStruct.PATIENT.PA_COD_PATIENT.ToString();
            }
        }

        public void CargarPacietnes(TextBox txtpatron, DataGridView grid)
        {
            ds = new DataSet();
            response = new MethodResponse();
            String patronBusquda = ControlGetValue(txtpatron);

            if (String.IsNullOrEmpty(patronBusquda))
            {
                response = model.buscarPacientes();
            }
            else
            {
                response = model.buscarPacientes(patronBusquda);
            }
            if (response.Estado)
            {
                grid.AutoGenerateColumns = false;
                grid.DataSource = response.ConjuntoDatos.Tables[0];
                FormateaGridFormato1(grid);
            }
        }

        public bool CargarPacietnes(TextBox txtName, TextBox txtFS_Name, TextBox txtLS_Name, DataGridView grid)
        {
            ds = new DataSet();
            response = new MethodResponse();
            String nombre = ControlGetValue(txtName);
            String prim_nombre = ControlGetValue(txtFS_Name);
            String apellido = ControlGetValue(txtLS_Name);

            response = model.buscarPacientes(nombre, prim_nombre, apellido);

            if (response.Estado)
            {
                grid.AutoGenerateColumns = false;
                grid.DataSource = response.ConjuntoDatos.Tables[0];
                FormateaGridFormato1(grid);
            }

            return response.Estado;
        }



        public void CrearPacientes(Control FIRST_NAME, Control MIDDLE_NAME, Control LAST_NAME,
                                            Control SEC_LAST_NAME, Control AGENCY_COD, Control DOB,
                                            Control PHYSYCAL_THERAPIST, Control PH_THR_ASSIST, Control PHONE,
                                            Control ADDRES, Control OCCUPATION, Control MAIL, Control CID)
        {

            String primer_nom = "", segundo_nom = "", apellido = "", segundo_ape = "";
            String cod_agencia = "", terapeuta = "", asistente = "", telefono = "", direccion = "", trabajo = "", correo = "", cedula = "";
            String fecha_naci = "";
            bool validacion = true;
            response = new MethodResponse();

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, FIRST_NAME, 1, Catalogo.MSG_ERROR1, out primer_nom);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, MIDDLE_NAME, -1, Catalogo.MSG_ERROR1, out segundo_nom);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, LAST_NAME, 1, Catalogo.MSG_ERROR1, out apellido);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, SEC_LAST_NAME, -1, Catalogo.MSG_ERROR1, out segundo_ape);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, AGENCY_COD, -1, Catalogo.MSG_ERROR1, out cod_agencia);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.FechaHora, DOB, 3, Catalogo.MSG_ERROR1, out fecha_naci);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.Entero, PHYSYCAL_THERAPIST, -1, Catalogo.MSG_ERROR1, out terapeuta);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.Entero, PH_THR_ASSIST, -1, Catalogo.MSG_ERROR1, out asistente);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, PHONE, 1, Catalogo.MSG_ERROR1, out telefono);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, ADDRES, -1, Catalogo.MSG_ERROR1, out direccion);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.Entero, OCCUPATION, -1, Catalogo.MSG_ERROR1, out trabajo);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.Correo, MAIL, -1, Catalogo.MSG_ERROR1, out correo);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, CID, -1, Catalogo.MSG_ERROR1, out cedula);

            if (validacion)
            {
                model.guardaPacientes(primer_nom, segundo_nom, apellido, segundo_ape, cod_agencia, Convert.ToDateTime(fecha_naci), Convert.ToInt16(terapeuta), Convert.ToInt16(asistente), telefono, direccion, Convert.ToInt16(trabajo), correo, cedula);
            }
        }


        public void ActualizaPacientes(ComboBox cmbx, Control FIRST_NAME, Control MIDDLE_NAME, Control LAST_NAME,
                                            Control SEC_LAST_NAME, Control AGENCY_COD, Control DOB,
                                            Control PHYSYCAL_THERAPIST, Control PH_THR_ASSIST, Control PHONE,
                                            Control ADDRES, Control OCCUPATION, Control MAIL, Control CID)
        {
            String primer_nom = "", segundo_nom = "", apellido = "", segundo_ape = "";
            String cod_agencia = "", terapeuta = "", asistente = "", telefono = "", direccion = "", trabajo = "", correo = "", cedula = "";
            String fecha_naci = "";
            bool validacion = true;
            response = new MethodResponse();

            String patronBusquda = ControlGetValue(cmbx);

            if (String.IsNullOrEmpty(patronBusquda))
            {
                MessageBox.Show("Debe seleccionar un paciente");
            }

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, FIRST_NAME, 1, Catalogo.MSG_ERROR1, out primer_nom);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, MIDDLE_NAME, -1, Catalogo.MSG_ERROR1, out segundo_nom);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, LAST_NAME, 1, Catalogo.MSG_ERROR1, out apellido);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, SEC_LAST_NAME, -1, Catalogo.MSG_ERROR1, out segundo_ape);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, AGENCY_COD, -1, Catalogo.MSG_ERROR1, out cod_agencia);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.FechaHora, DOB, 3, Catalogo.MSG_ERROR1, out fecha_naci);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.Entero, PHYSYCAL_THERAPIST, -1, Catalogo.MSG_ERROR1, out terapeuta);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.Entero, PH_THR_ASSIST, -1, Catalogo.MSG_ERROR1, out asistente);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, PHONE, 1, Catalogo.MSG_ERROR1, out telefono);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, ADDRES, -1, Catalogo.MSG_ERROR1, out direccion);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.Entero, OCCUPATION, -1, Catalogo.MSG_ERROR1, out trabajo);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.Correo, MAIL, -1, Catalogo.MSG_ERROR1, out correo);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, CID, -1, Catalogo.MSG_ERROR1, out cedula);

            if (validacion)
            {
                model.guardaPacientes(Convert.ToInt16(patronBusquda), primer_nom, segundo_nom, apellido, segundo_ape, cod_agencia, Convert.ToDateTime(fecha_naci), Convert.ToInt16(terapeuta), Convert.ToInt16(asistente), telefono, direccion, Convert.ToInt16(trabajo), correo, cedula);
            }
        }




        //**********************Colaboradores
        public void CargarColaboradores(TextBox txtname, ComboBox cbxposition, TextBox txtEmail, TextBox txtaddress, TextBox txtphone, ComboBox cmb)
        {
            ds = new DataSet();
            response = new MethodResponse();
            String patronBusquda = ControlGetValue(cmb);

            if (String.IsNullOrEmpty(patronBusquda))
            {
                MessageBox.Show("Debe seleccionar el Colaborador");
            }
            else
            {
                response = model.buscarColaboradores(patronBusquda);
            }
            if (response.Estado)
            {
                txtname.Text = response.ConjuntoDatos.Tables[0].Rows[0][0].ToString();
                cbxposition.SelectedValue = response.ConjuntoDatos.Tables[0].Rows[0][1].ToString();
                txtEmail.Text = response.ConjuntoDatos.Tables[0].Rows[0][2].ToString();
                txtaddress.Text = response.ConjuntoDatos.Tables[0].Rows[0][3].ToString();
                txtphone.Text = response.ConjuntoDatos.Tables[0].Rows[0][4].ToString();
            }
        }

        public void CrearColaborador(TextBox txtname, ComboBox cbxposition, TextBox txtEmail, TextBox txtaddress, TextBox txtphone)
        {
            String name, phone, email, address;
            name = "";
            phone = "";
            email = "";
            address = "";
            int ocupacion = Convert.ToInt16(ControlGetValue(cbxposition));
            bool validacion = true;
            response = new MethodResponse();

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, txtname, 1, Catalogo.MSG_ERROR1, out name);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, txtphone, 1, Catalogo.MSG_ERROR1, out phone);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, txtaddress, -1, Catalogo.MSG_ERROR1, out address);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.Correo, txtEmail, -1, Catalogo.MSG_ERROR1, out  email);

            if (validacion)
            {
                model.CrearColaborador(name, ocupacion, email, address, phone, 20);
            }
        }

        public void ModificarColaborador(ComboBox cmb, TextBox txtname, ComboBox cbxposition, TextBox txtEmail, TextBox txtaddress, TextBox txtphone, int estatus)
        {
            String name, phone, email, address;
            name = "";
            phone = "";
            email = "";
            address = "";
            int ocupacion = Convert.ToInt16(ControlGetValue(cbxposition));

            bool validacion = true;
            response = new MethodResponse();
            String patronBusquda = ControlGetValue(cmb);

            if (String.IsNullOrEmpty(patronBusquda))
            {
                MessageBox.Show("Debe seleccionar un colaborador");
            }

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, txtname, 1, Catalogo.MSG_ERROR1, out name);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, txtphone, 1, Catalogo.MSG_ERROR1, out phone);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, txtaddress, -1, Catalogo.MSG_ERROR1, out address);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.Correo, txtEmail, -1, Catalogo.MSG_ERROR1, out  email);

            if (validacion)
                model.ModificaColaborador(Convert.ToInt16(patronBusquda), name, ocupacion, email, address, phone, estatus);
        }


        //**********************USERS
        public void CargarUsers(TextBox username, TextBox password, ComboBox estado, ComboBox cmb)
        {
            ds = new DataSet();
            response = new MethodResponse();
            String patronBusquda = ControlGetValue(cmb);

            if (String.IsNullOrEmpty(patronBusquda))
            {
                MessageBox.Show("Debe seleccionar un paciente");
            }
            else
            {
                response = model.CargarUsers(patronBusquda);
            }
            if (response.Estado)
            {
                username.Text = response.ConjuntoDatos.Tables[0].Rows[0][0].ToString();
                password.Text = response.ConjuntoDatos.Tables[0].Rows[0][1].ToString();

                estado.SelectedValue = response.ConjuntoDatos.Tables[0].Rows[0][2].ToString();
            }
        }

        public void ModificarUsers(TextBox username, TextBox password, ComboBox cmbes, ComboBox cmb)
        {
            String user = "", pass = "";
            ds = new DataSet();
            bool validacion = true;
            response = new MethodResponse();
            String patronBusquda = ControlGetValue(cmb);
            String est = ControlGetValue(cmbes);

            if (String.IsNullOrEmpty(patronBusquda))
            {
                MessageBox.Show("Debe seleccionar un Usuario");
            }
            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, username, 1, Catalogo.MSG_ERROR1, out user);
            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, password, 1, Catalogo.MSG_ERROR1, out pass);
            if (validacion)
            {
                model.guardaUsers(Convert.ToInt16(patronBusquda), user, Convert.ToInt16(est), pass);
            }
        }

        public void CrearUsers(TextBox username, TextBox password, ComboBox cmbes)
        {
            String user = "", pass = "";
            ds = new DataSet();
            bool validacion = true;
            response = new MethodResponse();
            String est = ControlGetValue(cmbes);

            if (String.IsNullOrEmpty(est))
            {
                MessageBox.Show("Debe seleccionar un Usuario");
            }
            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, username, 1, Catalogo.MSG_ERROR1, out user);
            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, password, 1, Catalogo.MSG_ERROR1, out pass);
            if (validacion)
            {
                model.guardaUsers(user, pass, Convert.ToInt16(est));
            }
        }


        public void CargarAgencia(TextBox txtname, TextBox txtphone, TextBox txtEmail, TextBox txtaddress, ComboBox cmb)
        {
            ds = new DataSet();
            response = new MethodResponse();
            String patronBusquda = ControlGetValue(cmb);

            if (String.IsNullOrEmpty(patronBusquda))
            {
                MessageBox.Show("Debe seleccionar la agencia");
            }
            else
            {
                response = model.buscarAgencia(patronBusquda);
            }
            if (response.Estado)
            {
                txtname.Text = response.ConjuntoDatos.Tables[0].Rows[0][0].ToString();
                txtphone.Text = response.ConjuntoDatos.Tables[0].Rows[0][2].ToString();
                txtaddress.Text = response.ConjuntoDatos.Tables[0].Rows[0][1].ToString();
                txtEmail.Text = response.ConjuntoDatos.Tables[0].Rows[0][3].ToString();
            }
        }

        public void CrearAgencia(TextBox txtname, TextBox txtphone, TextBox txtEmail, TextBox txtaddress)
        {

            String name, phone, email, address;
            name = "";
            phone = "";
            email = "";
            address = "";
            bool validacion = true;
            response = new MethodResponse();

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, txtname, 1, Catalogo.MSG_ERROR1, out name);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, txtphone, 1, Catalogo.MSG_ERROR1, out phone);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, txtaddress, -1, Catalogo.MSG_ERROR1, out address);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.Correo, txtEmail, -1, Catalogo.MSG_ERROR1, out  email);

            if (validacion)
            {
                model.guardaAgencias(name, phone, address, email, 20);
            }

        }

        public void ModificarAgencia(ComboBox cmb, TextBox txtname, TextBox txtphone, TextBox txtEmail, TextBox txtaddress, int status)
        {
            String name, phone, email, address;
            name = "";
            phone = "";
            email = "";
            address = "";

            bool validacion = true;
            response = new MethodResponse();
            String patronBusquda = ControlGetValue(cmb);

            if (String.IsNullOrEmpty(patronBusquda))
            {
                MessageBox.Show("Debe seleccionar la agencia");
            }

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, txtname, 1, Catalogo.MSG_ERROR1, out name);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, txtphone, 1, Catalogo.MSG_ERROR1, out phone);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.AlfaNum, txtaddress, -1, Catalogo.MSG_ERROR1, out address);

            if (validacion)
                validacion = Validaciones(Catalogo.TiposValidaciones.Correo, txtEmail, -1, Catalogo.MSG_ERROR1, out  email);

            if (validacion)
                model.guardaAgencias(Convert.ToInt16(patronBusquda), name, phone, address, email, status);
        }











        public void CargarComboBox(Control control)
        {
            ControlGetValue(control);
        }

        public void ManejoForm(Form frmcerrar, Form frmabrir)
        {
            System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(ThreadProc));
            t.Start(frmabrir);
            frmcerrar.Close();

        }

        public void ManejoFormDialogWindow( Form frmabrir)
        {
            frmabrir.ShowDialog();

        }

        private static void ThreadProc(object s)
        {
            Application.Run((Form)s);
        }
        
        public void FormateaGridFormato1(DataGridView view)
        {
            view.RowHeadersVisible = false;
            view.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
            view.AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue;
            view.AlternatingRowsDefaultCellStyle.ForeColor = Color.Black;
            view.AllowUserToAddRows = false;
            view.AllowUserToDeleteRows = false;
            view.AllowUserToResizeRows = false;
        }

        public string ControlGetValue(Control controlActual)
        {
            string salida = "";
            if (controlActual != null)
            {
                if (controlActual.GetType().Name == Catalogo.ControlType.ComboBox.ToString())
                {
                    ComboBox objetoControl = (ComboBox)controlActual;
                    objetoControl.SelectedText.ToString();
                    objetoControl.SelectedItem.ToString();
                    salida = objetoControl.SelectedValue.ToString();
                }

                if (controlActual.GetType().Name == Catalogo.ControlType.CheckBox.ToString())
                {
                    CheckBox objetoControl = (CheckBox)controlActual;
                    salida = objetoControl.Checked.ToString();
                }

                if (controlActual.GetType().Name == Catalogo.ControlType.DataGridView.ToString())
                {
                }

                if (controlActual.GetType().Name == Catalogo.ControlType.DateTimePicker.ToString())
                {
                    DateTimePicker objetoControl = (DateTimePicker)controlActual;
                    salida = objetoControl.Value.ToString();
                }

                if (controlActual.GetType().Name == Catalogo.ControlType.RadioButton.ToString())
                {
                    RadioButton objetoControl = (RadioButton)controlActual;
                    salida = objetoControl.Checked.ToString();
                }

                if (controlActual.GetType().Name == Catalogo.ControlType.TextBox.ToString())
                {
                    TextBox objetoControl = (TextBox)controlActual;
                    salida = objetoControl.Text.ToString();
                }

                if (controlActual.GetType().Name == Catalogo.ControlType.Label.ToString() || controlActual.GetType().Name == Catalogo.ControlType.DBLabel.ToString())
                {
                    Label objetoControl = (Label)controlActual;
                    salida = objetoControl.Text;
                }

                if (controlActual.GetType().Name == Catalogo.ControlType.DBTextbox.ToString())
                {
                    DBTextbox objetoControl = (DBTextbox)controlActual;
                    salida = objetoControl.Text;
                }

                if (controlActual.GetType().Name == Catalogo.ControlType.DBDropDownList.ToString())
                {
                    DBDropDownList objetoControl = (DBDropDownList)controlActual;
                    salida = objetoControl.SelectedValue.ToString();
                }

                if (controlActual.GetType().Name == Catalogo.ControlType.DBDateTimePicker.ToString())
                {
                    DBDateTimePicker objetoControl = (DBDateTimePicker)controlActual;
                    salida = objetoControl.Value.ToString();
                }
            }

            return salida;

        }

        private Boolean Validaciones(Catalogo.TiposValidaciones validacion, Control control, int tamanoMin, String mensajeError)
        {
            bool resp_bool = false;
            String valorcontrol = ControlGetValue(control);
            resp_bool = Regex.IsMatch(valorcontrol, Catalogo.VALIDACIONES_ALFANUM);

            if (valorcontrol.Length > tamanoMin)
            {
                if (validacion == Catalogo.TiposValidaciones.AlfaNum)
                {
                    resp_bool = Regex.IsMatch(valorcontrol, Catalogo.VALIDACIONES_ALFANUM);
                    if (!resp_bool)
                        utilErrores.SetError(control, mensajeError);
                    else
                        utilErrores.SetError(control, String.Empty);
                }
                else if (validacion == Catalogo.TiposValidaciones.Correo)
                {
                    resp_bool = Regex.IsMatch(valorcontrol, Catalogo.VALIDACIONES_CORREO);
                    if (!resp_bool)
                        utilErrores.SetError(control, mensajeError);
                    else
                        utilErrores.SetError(control, String.Empty);
                }
                else if (validacion == Catalogo.TiposValidaciones.Entero)
                {
                    resp_bool = Regex.IsMatch(valorcontrol, Catalogo.VALIDACIONES_ENTERO);
                    if (!resp_bool)
                        utilErrores.SetError(control, mensajeError);
                    else
                        utilErrores.SetError(control, String.Empty);
                }
                else if (validacion == Catalogo.TiposValidaciones.Clave)
                {
                    resp_bool = Regex.IsMatch(valorcontrol, Catalogo.VALIDACIONES_CLAVE);
                    if (!resp_bool)
                        utilErrores.SetError(control, mensajeError);
                    else
                        utilErrores.SetError(control, String.Empty);
                }
                else
                { return true; }

                return resp_bool;
            }
            else
            {
                utilErrores.SetError(control, mensajeError);
                return false;
            }

        }


        private Boolean Validaciones(Catalogo.TiposValidaciones validacion, Control control, int tamanoMin, String mensajeError, out String resultado)
        {
            bool resp_bool = false;
            String valorcontrol = ControlGetValue(control);
            resultado = valorcontrol;
            resp_bool = Regex.IsMatch(valorcontrol, Catalogo.VALIDACIONES_ALFANUM);

            if (valorcontrol.Length > tamanoMin)
            {
                if (validacion == Catalogo.TiposValidaciones.AlfaNum)
                {
                    resp_bool = Regex.IsMatch(valorcontrol, Catalogo.VALIDACIONES_ALFANUM);
                    if (!resp_bool)
                        utilErrores.SetError(control, mensajeError);
                    else
                        utilErrores.SetError(control, String.Empty);
                }
                else if (validacion == Catalogo.TiposValidaciones.Correo)
                {
                    resp_bool = Regex.IsMatch(valorcontrol, Catalogo.VALIDACIONES_CORREO);
                    if (!resp_bool)
                        utilErrores.SetError(control, mensajeError);
                    else
                        utilErrores.SetError(control, String.Empty);
                }
                else if (validacion == Catalogo.TiposValidaciones.Entero)
                {
                    resp_bool = Regex.IsMatch(valorcontrol, Catalogo.VALIDACIONES_ENTERO);
                    if (!resp_bool)
                        utilErrores.SetError(control, mensajeError);
                    else
                        utilErrores.SetError(control, String.Empty);
                }
                else if (validacion == Catalogo.TiposValidaciones.Clave)
                {
                    resp_bool = Regex.IsMatch(valorcontrol, Catalogo.VALIDACIONES_CLAVE);
                    if (!resp_bool)
                        utilErrores.SetError(control, mensajeError);
                    else
                        utilErrores.SetError(control, String.Empty);
                }
                else
                { return true; }

                return resp_bool;
            }
            else
            {
                utilErrores.SetError(control, mensajeError);
                return false;
            }

        }



        #region PaginadeInicio

        public void CargaPantallaMenuGrid(DataGridView gridRefresh)
        {
            buscarCitasDia(gridRefresh);
        }

        /*  public void RefrescaPantalla(DataGridView gridRefresh)
          {
              buscarCitasDia(gridRefresh);
          }*/

        public void ActualizaInfoCitas(DataGridView gridRefresh)
        {
            int cantidad = gridRefresh.Columns.Count - 1;
            ArrayList listado_elementos;


            foreach (DataGridViewRow row in gridRefresh.Rows)
            {
                if (row.Cells[cantidad].Value.Equals("Y"))
                {
                    listado_elementos = new ArrayList();
                    resetEvents.Add(new ManualResetEvent(false));
                    String codcita, codpaciente, completado;
                    int contador;
                    completado = row.Cells[cantidad].Value.ToString();
                    codcita = ((DataRowView)row.DataBoundItem).Row.ItemArray[0].ToString();
                    codpaciente = ((DataRowView)row.DataBoundItem).Row.ItemArray[1].ToString();
                    contador = resetEvents.Count - 1;

                    listado_elementos.Add(codcita);
                    listado_elementos.Add(codpaciente);
                    listado_elementos.Add(completado);
                    listado_elementos.Add(contador);

                    /*Thread theadusage;
                    //theadusage = new Thread(() => actulizacionMasiva(codcita,codpaciente,completado,currentHandle));
                    currentHandle = new ManualResetEvent(false);
                    theadusage = new Thread(() => actulizacionMasiva(codcita, currentHandle));
                    theadusage.Name = "COD_CITA" + codcita;
                    waitHandle.Add(currentHandle);
                    //thread_multi.Add(theadusage);
                    theadusage.Start();*/

                    ThreadPool.QueueUserWorkItem(new WaitCallback(actulizacionMasiva), (object)listado_elementos);


                }
            }
            WaitHandle.WaitAll(resetEvents.ToArray());

        }


        private void actulizacionMasiva(String codCita, String codPaciente, String codCompletedo, ManualResetEvent actual)
        {
            response = new MethodResponse();
            int cita, paciente;

            cita = int.Parse(codCita);
            paciente = int.Parse(codPaciente);
            response = model.guardaEstadoVisita(cita, paciente, codCompletedo);

            if (response.Estado)
            {
                //actual.Set();
                //waitHandle[actual].Set();
                //currentHandle.Set();
            }
        }

        private void actulizacionMasiva(object listado)
        {
            ArrayList index = (ArrayList)listado;
            int valor = (int)index[3];

            response = new MethodResponse();
            int cita, paciente;
            String codCompletedo;
            cita = int.Parse(index[0].ToString());
            paciente = int.Parse(index[1].ToString());
            codCompletedo = index[2].ToString();
            response = model.guardaEstadoVisita(cita, paciente, codCompletedo);

            if (response.Estado)
            {
            }
            resetEvents[valor].Set();

        }

        private void buscarCitasDia(DataGridView grid)
        {
            try
            {

                ds = new DataSet();
                response = new MethodResponse();
                response = model.buscarCitasDia();

                if (response.Estado)
                {
                    //grid.DataSource = null;
                    grid.AutoGenerateColumns = false;
                    grid.DataSource = response.ConjuntoDatos.Tables[0];
                    FormateaGridFormato1(grid);
                }
            }
            catch (Exception ex) { }
        }

        #endregion PaginadeInicio

        #region     Appointments
        //public void ValidarCalendario(DateTime fechaInic, int cantSemanas , out DataTable DiasActualesCalendario)
        //{
        //    DiasActualesCalendario = new DataTable();
        //    response = new MethodResponse();
        //    response = model.buscarCalendarioProximo(fechaInic,cantSemanas);

        //    if (response.Estado)
        //    {
        //        DiasActualesCalendario = response.ConjuntoDatos.Tables[0];
        //    }
        //}

        #endregion  Appointments

        #region     Utilidades
        #endregion 
    }
}
